package me.mingshan.leetcode;

/**
 * https://leetcode.cn/problems/convert-binary-number-in-a-linked-list-to-integer/description/
 *
 * 1290. 二进制链表转整数
 *
 * 给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。
 *
 * 请你返回该链表所表示数字的 十进制值 。
 *
 * 最高位 在链表的头部。
 *
 *
 *
 * 示例 1：
 *
 *
 *
 * 输入：head = [1,0,1]
 * 输出：5
 * 解释：二进制数 (101) 转化为十进制数 (5)
 * 示例 2：
 *
 * 输入：head = [0]
 * 输出：0
 *
 * @author hanjuntao
 * @date 2025/7/31 0031
 */
public class L_1290_convert_binary_number_in_a_linked_list_to_integer {

    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        head.next = new ListNode(0);
        head.next.next = new ListNode(1);
        System.out.println(getDecimalValue(head));
    }

    /**
     * 思路：
     * 1. 遍历链表转字符串
     * 2. 2进制转10进制
     *
     * @param head
     * @return
     */
    public static int getDecimalValue(ListNode head) {
        String s = "";

        ListNode curr = head;
        while (curr != null) {
            s += curr.val;
            curr = curr.next;
        }

        // 2进制转10进制
        int result = 0;
        int j = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            int value = Integer.parseInt(String.valueOf(s.charAt(i)));
            result +=  value * Math.pow(2, j);
            j++;
        }

        return result;
    }
}
